package br.com.unifebe.tcc.componente.GUI;

import java.awt.Color;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.io.File;
import java.net.URL;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.Arrays;
import java.util.Locale;

import javax.swing.SwingConstants;


public class Parametros {
	private static final String CONFIGURACOES_PROPERTIES = "";
	private static final String IMAGES = "resources/";
	private static Parametros instance;




	public static DecimalFormat decimalFormatter;
	public static Toolkit toolkit;
	public static DecimalFormatSymbols dfs;
	public static Class clazz;
	
	private static Font fontTable;
	private static Font fontEditSelecionado;
	private static Font fontLabelEditSelecionado;
	private static Font fontEdit;
	private static Font fontLabel;
	private static Font fontLabelMsgs;
	private static Font fontInfLabel;
	private static Font fontInfLabelAnormal;
	private static Color corFontLabelEditSelecionado;
	private static Color corFontInfLabel;
	private static Color corFontLabelAnormal;
	private static char[] charsLiberados;
	private static char[] numerosInteirosLiberados;
	private static char[] numerosFloatsLiberados;
	private static Object[][] tiposPessoas;
	private static String[][] maskInscEstadual;

	static {
		decimalFormatter = (DecimalFormat) NumberFormat.getNumberInstance( new Locale("pt_BR") );
		decimalFormatter.setDecimalFormatSymbols( getFormatSimbols() );

		toolkit = Toolkit.getDefaultToolkit();
	}

	//Singleton 
	private Parametros() {
		
	}
	
	public static Parametros getInstance() {
		if (instance == null) {
			instance = new Parametros();
		}
		return instance;
	}
	

	/**
	 * Retorna o idioma escolhido do sistema
	 * @return String = idioma
	 */

	public static final String getLanguage() {
		//Fazer
		return "language_ptBR";
	}
	

	/**
	 * Tecla de atalho para o checkbox de filtrar
	 * @return
	 */
	public static final char getTeclaAtalhoCheckFiltro() {
		//Fazer
		return 'f';
	}

	/**
	 * Tecla de atalho para gravar
	 * @return
	 */
	public static final char getTeclaAtalhoGravar() {
		//Fazer
		return KeyEvent.VK_F10;
	}

	/**
	 * Cor do background do registro selecionado em uma JTable
	 * @return
	 */
	public static final Color getCorBgSelecao() {
		//fazer
		return Color.YELLOW;
	}

	/**
	 * Cor da fonte do registro selecionado em uma JTable
	 * @return
	 */
	public static final Color getCorFonteSelecao() {
		//fazer
		return Color.BLACK;
	}
	/**
	 * Cor do fundo do edit quando recebe o foco
	 * @return
	 */
	public static final Color getCorEditSelecionado() {
		return Color.YELLOW;
	}

	/**
	 * Cor dos labels de mensagems
	 * @return
	 */
	public static final Color getCorFontLabelMsgs() {
		return Color.BLUE;
	}

	/**
	 * Cor dos labels de mensagems
	 * @return
	 */
	public static final Color getCorFontLabelMsgsAlert() {
		return Color.RED;
	}

	/**
	 * Cor da fonte do edit quando recebe o foco
	 * @return
	 */
	public static final Color getCorFontEditSelecionado() {
		return Color.RED;
	}

	/**
	 * Cor do edit 
	 * @return
	 */
	public static final Color getCorEdit() {
		return Color.WHITE;
	}

	/**
	 * Cor da fonte do edit 
	 * @return
	 */
	public static final Color getCorFontEdit() {
		return Color.BLACK;
	}

	/**
	 * Fonte da JTable
	 */
	public static final Font getFontTable() {
		if (fontTable==null) {
			fontTable = new Font("Tahoma",Font.PLAIN,11);
		}
		return fontTable;
	}

	/**
	 * Fonte do edit quando recebe o foco 
	 * @return
	 */
	public static final Font getFontEditSelecionado() {
		if (fontEditSelecionado==null) {
			fontEditSelecionado = new Font("Tahoma",Font.PLAIN,11);
		}
		return fontEditSelecionado;
	}

	/**
	 * Fonte do label do edit quando recebe o foco 
	 * @return
	 */
	public static final Font getFontLabelEditSelecionado() {
		if (fontLabelEditSelecionado==null) {
			fontLabelEditSelecionado = new Font("Tahoma",Font.PLAIN, 11);
		}
		return fontLabelEditSelecionado;
	}

	/**
	 * Fonte do edit 
	 * @return
	 */
	public static final Font getFontEdit() {
		if (fontEdit==null) {
			fontEdit = new Font("Tahoma",Font.PLAIN,11);
		}
		return fontEdit;
	}

	/**
	 * Fonte dos Label 
	 * @return
	 */
	public static final Font getFontLabel() {
		if (fontLabel==null) {
			fontLabel = new Font("Tahoma",Font.PLAIN,11);
		}
		return fontLabel;
	}

	/**
	 * Fonte dos Label 
	 * @return
	 */
	public static final Font getFontLabelMsgs() {
		if (fontLabelMsgs == null) {
			fontLabelMsgs = new Font("Tahoma",Font.PLAIN,11);
		}
		return fontLabelMsgs;
	}

	/**
	 * Fonte dos Inf Label 
	 * @return
	 */
	public static final Font getFontInfLabel() {
		if (fontInfLabel==null) {
			fontInfLabel = new Font("Tahoma",Font.PLAIN,11);
		}
		return fontInfLabel;
	}

	public static final Font getFontInfLabelAnormal() {
		if (fontInfLabelAnormal==null) {
			fontInfLabelAnormal = new Font("Tahoma",Font.PLAIN,11);
		}
		return fontInfLabelAnormal;
	}

	/**
	 * Alinhamento do Label
	 * @return
	 */
	public static final int getAlinhamentoHorizontalLabel() {
		return SwingConstants.RIGHT;
	}

	/**
	 * Cor da fonte do label 
	 * @return
	 */
	public static final Color getCorFontLabel() {
		return Color.BLACK;
	}

	/**
	 * Cor da fonte do label do edit selecionado 
	 * @return
	 */
	public static final Color getCorFontLabelEditSelecionado() {
		if (corFontLabelEditSelecionado==null) {
			corFontLabelEditSelecionado = new Color(89,42,44);
		}
		return corFontLabelEditSelecionado;
	}

	/**
	 * Cor da fonte do Inf label 
	 * @return
	 */
	public static final Color getCorFontInfLabel() {
		if (corFontInfLabel==null) {
			corFontInfLabel = new Color(45,144,203);
		}
		return corFontInfLabel;
	}

	/**
	 * Cor da fonte do Inf label 
	 * @return
	 */
	public static final Color getCorFontInfLabelAnormal() {
		if (corFontLabelAnormal == null) {
			corFontLabelAnormal = Color.GREEN;
		}
		return corFontLabelAnormal;
	}

	/**
	 * Caracteres liberados para campos Strings 
	 * @return
	 */
	public static final char[] getCharsLiberados() {
		if (charsLiberados==null) {
			charsLiberados = new char[] {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
					'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
					
					
					'0','1','2','3','4','5','6','7','8','9',
					'Â','`',  
					'+','-','(',')','*','&','%','$','#','!','?',':','.',',','[',']','{','}','"','\'','*',';',
					'\\','/','=','@','>','<','_',' ','~','ç'};
			Arrays.sort( charsLiberados );
		}
		return charsLiberados; 
	}

	/**
	 * Caracteres liberados para campos Inteiros
	 * @return
	 */
	public static final char[] getNumerosInteirosLiberados() {
		if (numerosInteirosLiberados==null) {
			numerosInteirosLiberados = new char[] {'0','1','2','3','4','5','6','7','8','9','-'};
		}
		return numerosInteirosLiberados;
	}

	/**
	 * Caracteres liberados para campos Float
	 * @return
	 */
	public static final char[] getNumerosFloatsLiberados() {
		if (numerosFloatsLiberados == null) {
			numerosFloatsLiberados = new char[] {'0','1','2','3','4','5','6','7','8','9',',','.','-'};
		}
		return numerosFloatsLiberados;
	}

	/**
	 * Retorna a Tecla que aciona a pesquisa nos botos de loopkup 
	 */
	public static final int getTeclaAtalhoPesquisa() {
		return java.awt.event.KeyEvent.VK_F2;
	}

	/**
	 * Retorna os Tipos de Pessoas do Sistema
	 */

	public static final Object[][] getTiposPessoas() {
		if (tiposPessoas==null) {
			tiposPessoas = new Object[][] {  {"FÃ­sica",			'F'},
					{"JurÃ­dica",		'J'},
					{"Produtor Rural",  'R'},
					{"Outras", 			'O'}};
		}
		return tiposPessoas;
	}

	/**
	 * Retorna as Mascaras de Inscriï¿½ï¿½es Estaduais
	 * @return
	 */

	public static final String[][] getMaskInscEstadual() {
		if (maskInscEstadual==null) {
			maskInscEstadual = new String[][]{{"AC", "##.###.###/###-##"},
					{"AL", "24.#.#####-#"},
					{"AP", "03.######-#"},
					{"AM", "##.###.###-#"},
					{"BA", "######-##"},
					{"CE", "########-#"},
					{"DF", "##.######.###-##"},
					{"ES", "########-#"},
					{"GO", "##.###.###-#"},
					{"MA", "########-#"},
					{"MT", "##########-#"},
					{"MS", "28######-#"},
					{"MG", "###.###.###/####"},
					{"PA", "15-######-#"},
					{"PB", "########-#"},
					{"PR", "###.#####-##"},
					{"PE", "##.#.###.#######-#"},
					{"PI", "#########"},
					{"RJ", "##.###.##-#"},
					{"RN", "##########"}, //Hï¿½ dois tipos de mascaras 20.0.040.040-0 e 20.040.040-0
					{"RS", "###/######-#"},
					{"RO", "#############-#"},
					{"RR", "########-#"},
					{"SC", "###.###.###"},
					{"SP", "###.###.###.###"}, //para produtor rural P-########.#/###
					{"SE", "########-#"},
					{"TO", "##.##.######-#"}};
		}

		return maskInscEstadual;
	}

	public static final String getMascaraData() {
		return "##/##/####";
	}

	public static final String getFormatoCNPJ() {
		return "##.###.###/####-##";
	}

	public static final String getFormatoCPF() {
		return "###.###.###-##";
	}

	public static final String getFormatoData() {
		return "dd/MM/yyyy";
	}

//	public static final String getMascaraHorario() {
//		return Horario.Precisao.SEGUNDOS.getMask();
//	}

	public static final String getFormatoHorario() {
		return "HH:mm:ss";
	}


	public static final DecimalFormatSymbols getFormatSimbols() {
		if (dfs==null) {
			dfs = new DecimalFormatSymbols( new Locale("pt_BR") );
			dfs.setDecimalSeparator( ',' );
			dfs.setGroupingSeparator('.');
		}
		return dfs;
	}


	private static URL getImageUrl(String ref){
		URL url = null;
		try {
			File f = new File(ref);
			if ( f.exists() ) {
				url =  f.toURI().toURL(); 
			}
			if (url == null) {
				url = getInstance().getClass().getResource( ref.startsWith("/") ? ref : "/"+ref );
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return url;
	}
	

}
